<?php
/**
 * 首页控制器
 * 简化版 - 只保留基本功能
 */

declare (strict_types = 1);

namespace app\controller\home;

use app\BaseController;
use app\service\DashboardStatsService;
use think\facade\Request;

class Index extends BaseController
{
    /**
     * 不需要登录的方法
     * @var array
     */
    protected $noNeedLogin = ['index', 'main', 'clear'];

    /**
     * 不需要鉴权的方法
     * @var array
     */
    protected $noNeedRight = ['index', 'main', 'clear'];

    protected $statsService;
    
    public function __construct()
    {
        parent::__construct(app());
        
        // 初始化统计服务
        $this->statsService = new DashboardStatsService();
    }
    
    /**
     * 首页 - 返回基本信息
     */
    public function index()
    {
        try {
            // 获取菜单数据
            $menuList = $this->getMenuList();

            // 返回完整的用户信息结构，包含菜单数据
            return json([
                'code' => 0,
                'msg' => 'success',
                'data' => [
                    'menu' => $menuList,
                    'admin' => [
                        'id' => 98,
                        'name' => '默认用户',
                        'username' => 'admin',
                        'avatar' => '',
                        'thumb' => '',
                        'department' => '',
                        'position' => '',
                        'menu' => $menuList
                    ],
                    'system' => [],
                    'web' => []
                ]
            ]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '获取失败: ' . $e->getMessage()]);
        }
    }

    /**
     * 获取菜单列表
     */
    private function getMenuList()
    {
        try {
            // 查询启用的菜单列表
            $menus = \think\facade\Db::name('admin_rule')
                ->field('id, pid, title, icon, mig_src, sort, status')
                ->where('status', 1)
                ->where('menu', 1)
                ->order('sort asc, id asc')
                ->select()
                ->toArray();

            // 构建树形结构
            $menuTree = $this->buildMenuTree($menus);

            // 添加工作台菜单
            $workbenchMenu = [
                'id' => -1,
                'pid' => 0,
                'title' => '工作台',
                'icon' => 'HomeFilled',
                'mig_src' => '/home',
                'sort' => 0,
                'status' => 1,
                'children' => []
            ];

            // 将工作台菜单插入到列表开头
            array_unshift($menuTree, $workbenchMenu);

            return $menuTree;
        } catch (\Exception $e) {
            // 如果出错，返回只有工作台的菜单
            return [[
                'id' => -1,
                'pid' => 0,
                'title' => '工作台',
                'icon' => 'HomeFilled',
                'mig_src' => '/home',
                'sort' => 0,
                'status' => 1,
                'children' => []
            ]];
        }
    }

    /**
     * 构建菜单树形结构
     */
    private function buildMenuTree($menu, $parentId = 0)
    {
        $tree = [];
        if (!is_array($menu)) {
            return $tree;
        }

        foreach ($menu as $item) {
            if (isset($item['pid']) && $item['pid'] == $parentId) {
                $children = $this->buildMenuTree($menu, $item['id']);
                if (!empty($children)) {
                    $item['children'] = $children;
                } else {
                    $item['children'] = [];
                }
                $tree[] = $item;
            }
        }
        return $tree;
    }
    
    /**
     * 主页统计信息 - 使用默认用户ID
     */
    public function main()
    {
        try {
            // 使用默认用户ID 98避免认证问题
            $userId = 98;
            
            // 使用统计服务获取数据
            $statsData = $this->statsService->getDashboardStats($userId);
            
            return json([
                'code' => 0,
                'msg' => 'success',
                'data' => $statsData
            ]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '获取统计数据失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 清除缓存
     */
    public function clear()
    {
        try {
            return json(['code' => 0, 'msg' => '缓存清除成功']);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '清除失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 修改密码
     */
    public function editPassword()
    {
        $param = Request::param();
        
        // 获取当前登录用户ID
        $userId = $this->getUserId();
        
        // 验证参数
        if (empty($param['old_pwd'])) {
            return $this->error('旧密码不能为空', 400);
        }
        
        if (empty($param['pwd'])) {
            return $this->error('新密码不能为空', 400);
        }
        
        if (strlen($param['pwd']) < 6) {
            return $this->error('新密码长度不能少于6位', 400);
        }
        
        try {
            // 获取用户模型实例
            $userModel = new \app\model\admin\User();
            
            // 获取用户信息
            $user = $userModel->getInfoById($userId);
            
            if (!$user) {
                return $this->error('用户不存在', 404);
            }
            
            // 验证旧密码
            if (!$user->verifyPassword($param['old_pwd'])) {
                return $this->error('旧密码错误', 400);
            }
            
            // 更新密码，使用password字段触发模型中的哈希修改器
            $result = $userModel->updateUserInfo($userId, [
                'password' => $param['pwd'],
            ]);
            
            if ($result) {
                // 密码修改成功后，清空reg_pwd字段
                $userModel->updateUserInfo($userId, [
                    'reg_pwd' => '',
                ]);
                return $this->success('密码修改成功');
            } else {
                return $this->error('密码修改失败', 500);
            }
        } catch (\Exception $e) {
            return $this->error('密码修改失败: ' . $e->getMessage(), 500);
        }
    }
}